package com.aps.common.page;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.ArrayList;
import java.util.List;

/**
 *  @description: 分页转换工具类
 *  @author    jsy
 *  @date      2025/2/18 14:46
 */
public class PageConverter {
    public static <T, R> IPage<R> convert(IPage<T> sourcePage, Class<R> targetClass) {
        // 获取源分页对象中的记录列表
        List<T> sourceRecords = sourcePage.getRecords();
        List<R> targetRecords = new ArrayList<>();

        // 遍历源记录列表，将每个实体对象转换为对应的 VO 对象
        for (T source : sourceRecords) {
            try {
                // 创建目标类的实例
                R target = targetClass.getDeclaredConstructor().newInstance();
                // 使用 Hutool 的 BeanUtil.copyProperties 方法复制属性
                BeanUtil.copyProperties(source, target);
                targetRecords.add(target);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        // 创建一个新的分页对象，将目标记录列表设置进去，并保留原分页的其他信息
        IPage<R> targetPage = new Page<>(sourcePage.getCurrent(), sourcePage.getSize(), sourcePage.getTotal());
        targetPage.setRecords(targetRecords);
        return targetPage;
    }
}
